'''
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License") you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
'''
from base.rdf.Container import Container

'''
 * <p>An RDF Alternative container.</p>
 *
 * <p>This interface defines methods for accessing RDF Alternative resources.
 * These methods operate on the RDF statements contained in a model.  The
 * Alternative implementation may cache state from the underlying model, so
 * objects should not be added to or removed from the Alternative by directly
 * manipulating its properties, whilst the Alternative is being
 * accessed through this interface.</p>
 *
 * <p>When a member is deleted from an Alternative using this interface, or an
 * iterator returned through this interface, all the other members with
 * higher ordinals are renumbered using an implementation dependent
 * algorithm.</p>
 *
 * <p>This interface provides methods supporting typed literals.  This means
 * that methods are provided which will translate a built in type, or an
 * object to an RDF Literal.  This translation is done by invoking the
 * <CODE>toString()</CODE> method of the object, or its built in equivalent.
 * The reverse translation is also supported.  This is built in for built
 * in types.  Factory objects, provided by the application, are used
 * for application objects.</p>
 * <p>This interface provides methods for supporting enhanced resources.  An
 * enhanced resource is a resource to which the application has added
 * behaviour.  RDF containers are examples of enhanced resources built in
 * to this package.  Enhanced resources are supported by encapsulating a
 * resource created by an implementation in another class which adds
 * the extra behaviour.  Factory objects are used to construct such
 * enhanced resources.</p>
'''

from abc import ABC, abstractmethod

class Alt(ABC, Container):

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param RDFNode o
    # result Alt
    @abstractmethod
    def setDefault(self, o):
        pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param boolean o
    # result Alt
    @abstractmethod
    def setDefaultPrimitive(self, o):
        pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param long o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param char o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param float o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param double o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param String o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param String o, String l
    # result Alt
    # @abstractmethod
    # def setDefault(self, o, l):
    #     pass

    '''
     * Set the default value of this container.
     *
     * @param o The value to be set.
     * @return This object to permit cascading calls.
    '''
    # param Object o
    # result Alt
    # @abstractmethod
    # def setDefault(self, o):
    #     pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource.
    '''
    # param 
    # result RDFNode
    @abstractmethod
    def getDefault(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result Resource
    @abstractmethod
    def getDefaultResource(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result Literal
    @abstractmethod
    def getDefaultLiteral(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result boolean
    @abstractmethod
    def getDefaultBoolean(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result byte
    @abstractmethod
    def getDefaultByte(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result short
    @abstractmethod
    def getDefaultShort(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result int
    @abstractmethod
    def getDefaultInt(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result long
    @abstractmethod
    def getDefaultLong(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result char
    @abstractmethod
    def getDefaultChar(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result float
    @abstractmethod
    def getDefaultFloat(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result double
    @abstractmethod
    def getDefaultDouble(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result String
    @abstractmethod
    def getDefaultString(self):
        pass

    '''
     * Return the language of the default value for this resource.
     *
     * @return the language of the default value for this resource
    '''
    # param 
    # result String
    @abstractmethod
    def getDefaultLanguage(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result Alt
    @abstractmethod
    def getDefaultAlt(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result Bag
    @abstractmethod
    def getDefaultBag(self):
        pass

    '''
     * Return the default value for this resource.
     *
     * @return the default value for this resource interpreted as the return
     * type.
    '''
    # param 
    # result Seq
    @abstractmethod
    def getDefaultSeq(self):
        pass

    '''
     * Remove a value from the container.
     * <p>The predicate of the statement <CODE>s</CODE> identifies the
     * ordinal of the value to be removed.  Once removed, the values in the
     * container with a higher ordinal value are renumbered.  The renumbering
     * algorithm is implementation dependent.
     * </p>
     *
     * @param s The statement to be removed from the model.
     * @return this container to enable cascading calls.
    '''
    #@Override
    # param Statement s
    # result Container
    @abstractmethod
    def remove(self, s):
        pass

